"use strict"

const Service = require('egg').Service
const moment = require('moment')

class BrandService extends Service {
    /**
     * @param {查询} param
     * page(页码 -否), rows(页数-否)
     */
    async list(param) {
        const { app, ctx } = this
        let option = {}
        if(param.page && param.rows) {
            option = {
                limit: 1 * param.rows,
                offset: (param.page - 1) * param.rows,
            }
        }
        try {
            const result = await app.model.Brand.findAndCountAll(option)
            return ctx.app.returnHint(result, '查询成功').definedSucceed
        }catch(err) {
            console.log(err);
            return ctx.app.returnHint(err, '查询失败').definedError
        }
    }
    
    /**
     *  @param {详情} param 
     * id(品牌id)
     */
    async details(param) {
        const { app, ctx } = this
        const id = param.id
        try{
            const result = await app.model.Brand.findOne({
                attributes: ['id', 'name', 'img', 'create_time'],
                where: { id },
            })

            return ctx.app.returnHint(result, '查询成功').definedSucceed
        }catch(err) {
            console.log(err)
            return ctx.app.returnHint(err, '查询失败').definedError
        }
    }

    /**
     * 
     * @param {添加} param 
     * name, img
     */
    async add(param) {
        const { app, ctx } = this
        // 开始事务
        const transaction = await app.model.transaction(); 
        try{
            const data = {
                name: param.name,
                img: param.img,
                create_time: moment().format('YYYY-MM-DD HH:mm:ss')
            }
            // 添加数据
            const result = await app.model.Brand.findOrCreate({
                defaults: data,
                fields: ['name', 'img', 'create_time'],
                where: {
                    name: param.name
                },
                transaction
            })
            // 提交事务
            await transaction.commit();
            if(result[1]){
                return ctx.app.returnHint(result[0], '添加成功').definedSucceed
            }else{
                return ctx.app.returnHint(null, '品牌已存在').definedSucceed
            }
        }catch(err) {
            await transaction.rollback();// 捕获异常后回滚事务！！
            console.log(err)
            return ctx.app.returnHint(err, '添加失败').definedError
        }
    }

    /**
     * 
     * @param {编辑} param 
     * id(品牌id)
     * 
     */
    async redact(param) {
        const { app, ctx } = this
        // 开始事务
        const transaction = await app.model.transaction(); 
        try{
            const data = {
                name: param.name,
                img: param.img,
                update_time: moment().format('YYYY-MM-DD HH:mm:ss')
            }
            // 更新数据
            const result = await app.model.Brand.update(data, {
                where: { id: param.id },
                transaction
            })
            // 提交事务
            await transaction.commit();
            return ctx.app.returnHint(result, '更新成功').definedSucceed
        }catch(err) {
            await transaction.rollback();// 捕获异常后回滚事务！！
            console.log(err)
            return ctx.app.returnHint(err, '更新失败').definedError
        }
    }

    /**
     * 
     * @param {删除} param 
     * id(品牌id)
     */
    async del(param){
        const { app, ctx } = this
        const transaction = await app.model.transaction(); // 开始事务
        const id = param.id
        
        try{
            const result = await app.model.Brand.destroy({
                where: { id },
                transaction
            })
            // 事务提交
            await transaction.commit();
            return ctx.app.returnHint(result, '删除成功').definedSucceed
        }catch(err) {
            console.log(err)
            await transaction.rollback();// 捕获异常后回滚事务！！
            return ctx.app.returnHint(err, '删除失败').definedError
        }
 
    }
}

module.exports = BrandService